package com.faithbj.service;

import com.faithbj.common.model.CheckTotal;
import com.faithbj.common.model.DataExportLog;
import com.faithbj.common.model.compare.*;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 电子比对Service
 * @author chen liu
 *
 */
public interface CompareService {
	/**
	 * 生成批次，发送委办
	 * @param batchingMap batching map
	 * @return 
	 */
	Object genearateBatch(Map<String, List<CheckTotal>> batchingMap);

	/**
	 * 公积金管理委办返回数据save
	 * @param officalData
	 */
	void saveOrUpdateAFMOfficalData(AFMOfficalData officalData);

	/**
     * 民政局委办返回数据save
     * @param officalData
     */
	void saveOrUpdateCivilOfficalData(CivilOfficalData officalData);
	
	/**
     * 房产委办返回数据save
     * @param officalData
     */
	void saveOrUpdateHPOfficalData(HPOfficalData officalData);
	
	/**
     * 工商行政管理委办返回数据save
     * @param officalData
     */
	void saveOrUpdateIBAOfficalData(IBAOfficalData officalData);
	
	/**
     * 人口委办返回数据save
     * @param officalData
     */
	void saveOrUpdatePSOfficalData(PopulationOfficalData officalData);

	/**
     * 社会保险委办返回数据save
     * @param officalData
     */
	void saveOrUpdateSIOfficalData(SIOfficalData officalData);
	
	/**
     * 税务委办返回数据save
     * @param officalData
     */
	void saveOrUpdateTaxOfficalData(TaxOfficalData officalData);
	
	/**
	 * 查询需要更新的公积金委办列表
	 * @param batchNum
	 * @param departmentNum
	 * @param mainApplicantCardId
	 * @return
	 */
	List<AFMOfficalData> getAFMOfficalDataForUpdate(String batchNum, String departmentNum, String mainApplicantCardId);
	
	/**
     * 查询需要更新的民政局委办列表
     * @param batchNum
     * @param departmentNum
     * @param mainApplicantCardId
     * @return
     */
    List<CivilOfficalData> getCivilOfficalDataForUpdate(String batchNum, String departmentNum, String mainApplicantCardId);
    
    /**
     * 查询需要更新的房产局委办列表
     * @param batchNum
     * @param departmentNum
     * @param mainApplicantCardId
     * @return
     */
    List<HPOfficalData> getHPOfficalDataForUpdate(String batchNum, String departmentNum, String mainApplicantCardId);
    
    /**
     * 查询需要更新的工商行政管理委办列表
     * @param batchNum
     * @param departmentNum
     * @param mainApplicantCardId
     * @return
     */
    List<IBAOfficalData> getIBAOfficalDataForUpdate(String batchNum, String departmentNum, String mainApplicantCardId);
    
    /**
     * 查询需要更新的公安局委办列表
     * @param batchNum
     * @param departmentNum
     * @param mainApplicantCardId
     * @return
     */
    List<PopulationOfficalData> getPSOfficalDataForUpdate(String batchNum, String departmentNum, String mainApplicantCardId);
    
    /**
     * 查询需要更新的社会保险委办列表
     * @param batchNum
     * @param departmentNum
     * @param mainApplicantCardId
     * @return
     */
    List<SIOfficalData> getSIOfficalDataForUpdate(String batchNum, String departmentNum, String mainApplicantCardId);
    
    /**
     * 查询需要更新的税务委办列表
     * @param batchNum
     * @param departmentNum
     * @param mainApplicantCardId
     * @return
     */
    List<TaxOfficalData> getTaxOfficalDataForUpdate(String batchNum, String departmentNum, String mainApplicantCardId);
    
    /**
     * 根据申请人身份证号和受理编号查询公积金委办返回数据
     * @param applicantCardNum 申请人身份证号
     * @param applyNum 申请编号
     * @return
     */
    AFMOfficalData getAFMOfficalData(String applicantCardNum, String applyNum);
    
    /**
     * 根据申请人身份证号和受理编号查询民政局委办返回数据
     * @param applicantCardNum 申请人身份证号
     * @param applyNum 申请编号
     * @return
     */
    CivilOfficalData getCivilOfficalData(String applicantCardNum, String applyNum);
    
    /**
     * 根据申请人身份证号和受理编号查询房产局委办返回数据
     * @param applicantCardNum 申请人身份证号
     * @param applyNum 申请编号
     * @return
     */
    HPOfficalData getHPOfficalData(String applicantCardNum, String applyNum);
    
    /**
     * 根据申请人身份证号和受理编号查询工商行政管理局委办返回数据
     * @param applicantCardNum 申请人身份证号
     * @param applyNum 申请编号
     * @return
     */
    IBAOfficalData getIBAOfficalData(String applicantCardNum, String applyNum);
    
    /**
     * 根据申请人身份证号和受理编号查询公安局委办返回数据
     * @param applicantCardNum 申请人身份证号
     * @param applyNum 申请编号
     * @return
     */
    PopulationOfficalData getPSOfficalData(String applicantCardNum, String applyNum);
    
    /**
     * 根据申请人身份证号和受理编号查询社会保险委办返回数据
     * @param applicantCardNum 申请人身份证号
     * @param applyNum 申请编号
     * @return
     */
    SIOfficalData getSIOfficalData(String applicantCardNum, String applyNum);
    
    /**
     * 根据申请人身份证号和受理编号查询税务委办返回数据
     * @param applicantCardNum 申请人身份证号
     * @param applyNum 申请编号
     * @return
     */
    TaxOfficalData getTaxOfficalData(String applicantCardNum, String applyNum);
    
    /**
     * 获取最近一次数据导出的时间
     * @return
     */
    Date getLatestExportTime();
    /**
     * 插入导出日志
     * @param log
     */
    void saveOrUpdateExportLog(DataExportLog log);
}
